"""
用户和系统相关模型
"""
from datetime import datetime, date
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
from sqlalchemy.orm import relationship
from .base import BaseModel, get_db

class User(UserMixin, BaseModel):
    """用户模型"""
    __tablename__ = 'user'
    
    # 基本信息
    username = get_db().Column(get_db().String(80), unique=True, nullable=False)
    password_hash = get_db().Column(get_db().String(120), nullable=False)
    name = get_db().Column(get_db().String(100), nullable=False)
    role = get_db().Column(get_db().String(50), default='user')  # user, admin
    department = get_db().Column(get_db().String(100))  # 部门
    position = get_db().Column(get_db().String(100))  # 职位
    
    # 扩展字段
    email = get_db().Column(get_db().String(120))  # 邮箱
    phone = get_db().Column(get_db().String(20))  # 电话
    avatar = get_db().Column(get_db().String(255))  # 头像路径
    gender = get_db().Column(get_db().String(10), default='未知')  # 性别：男、女、未知
    birthday = get_db().Column(get_db().Date)  # 生日
    entry_date = get_db().Column(get_db().Date)  # 入职时间
    status = get_db().Column(get_db().String(20), default='在职')  # 状态：在职、离职、休假等
    last_login = get_db().Column(get_db().DateTime)  # 最后登录时间
    is_active = get_db().Column(get_db().Boolean, default=True)  # 是否激活
    
    def set_password(self, password):
        """设置密码哈希"""
        self.password_hash = generate_password_hash(password)
    
    def check_password(self, password):
        """验证密码"""
        return check_password_hash(self.password_hash, password)

class Notification(BaseModel):
    """通知模型"""
    __tablename__ = 'notification'
    
    user_id = get_db().Column(get_db().Integer, get_db().ForeignKey('user.id'), nullable=False)
    title = get_db().Column(get_db().String(200), nullable=False)
    content = get_db().Column(get_db().Text)
    notification_type = get_db().Column(get_db().String(50), nullable=False)  # 系统通知、任务提醒、里程碑预警等
    is_read = get_db().Column(get_db().Boolean, default=False)
    
    # 关联关系
    user = relationship('User', backref='notifications')

class UserActivity(BaseModel):
    """用户活动记录模型"""
    __tablename__ = 'user_activity'
    
    user_id = get_db().Column(get_db().Integer, get_db().ForeignKey('user.id'), nullable=False)
    activity_type = get_db().Column(get_db().String(50), nullable=False)  # 访问、操作等
    target_type = get_db().Column(get_db().String(50), nullable=False)  # 项目、任务、客户等
    target_id = get_db().Column(get_db().Integer, nullable=False)  # 目标ID
    activity_time = get_db().Column(get_db().DateTime, default=datetime.now, nullable=False)
    
    # 关联关系
    user = relationship('User', backref='activities')